package com.dyh.quickdemozwei.avgDemo;

import com.google.common.collect.Lists;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;

public class AvgApp {


    public static void main(String[] args) {

        AvgScenario avgScenario = new AvgScenario();


        AvgEngine avgEngine = new AvgEngine();
        avgEngine.avgInputCtrl = new AvgInputCtrlConsole();
        ((AvgInputCtrlConsole) avgEngine.avgInputCtrl).scanner = new Scanner(System.in);

        avgEngine.avgOutputCtrl = new AvgOutputCtrlConsole();


        WaitClick wc = new WaitClick();

        ShowText st0 = new ShowText();
        st0.text = "hello";


        ShowChoose sc = new ShowChoose();
        sc.titles = Lists.newArrayList("c1","c2");


        Choose choose = new Choose();
//        choose.jump = "c1";

        AvgScene avgScene = new AvgScene();
        avgScene.avgEngine = avgEngine;
        avgScene.avgScenario = avgScenario;
        avgScene.avgCommands =  Lists.newArrayList(wc,st0,sc,choose);
        avgScenario.currentScene = avgScene;






        ShowText st1 = new ShowText();
        st1.text = "c1 .....";

        AvgScene c1Scene = new AvgScene();
        c1Scene.avgEngine = avgEngine;
        c1Scene.avgScenario = avgScenario;
        c1Scene.avgCommands =  Lists.newArrayList(st1);
        avgScenario.seceneMap.put("c1",c1Scene);



        avgScenario.execute();


    }

//    public static void main(String[] args) {
//        Scanner scanner = new Scanner(System.in);
////        String input = scanner.nextLine();
//
//        AvgInputCtrlConsole avgInputCtrl = new AvgInputCtrlConsole();
//        avgInputCtrl.scanner = scanner;
//
//
//        AvgOutputCtrlConsole avgOutputCtrl = new AvgOutputCtrlConsole();
//
//
//        AvgEngine avgEngine = new AvgEngine();
//        avgEngine.avgInputCtrl = avgInputCtrl;
//        avgEngine.avgOutputCtrl = avgOutputCtrl;
//
//        AvfScene avfSecene = new AvfScene();
//        {
//            avfSecene.setDatas(
////                Lists.newArrayList("hello","#wc{\"time\":\"5\"}")
//                    Lists.newArrayList("hello",
//                            "#wc=time:1,split:2;",
//                            "world",
//                            "#showChoose=c1,c2;",
//                            "#choose=jump:s1-c1"
//
//
//                            )
//            );
//        }
//
//
//        AvfScene avfSeceneC1 = new AvfScene();
//        {
//            avfSeceneC1.setDatas(
//                    Lists.newArrayList("choose1")
//            );
//        }
//
//
//
//
//        AvgScenario avgScenario = new AvgScenario();
//        avgScenario.seceneMap.put("s1",avfSecene);
//        avgScenario.seceneMap.put("s1-c1",avfSeceneC1);
//
//        Map<String, Supplier<? extends AvgCommand>> insMap = new HashMap<>();
//        insMap.put("wc",WaitClick::new);
//        insMap.put("showChoose",ShowChoose::new);
//        insMap.put("choose",Choose::new);
//
//
//        avgScenario.currentScene = avfSecene;
//
//
//        Runnable r = ()->{
//
//
//            for (;;){
//                boolean sb = true;
//                for (String data : avgScenario.currentScene.getDatas()) {
//
//                    sb = true;
//                    if (data.startsWith("#")){
//                        int tagL = data.indexOf("=");
//
//                        String tag = data.substring(1,tagL);
//                        String param = data.substring(tagL+1);
//
//                        AvgCommand avgCommand =  insMap.get(tag).get();
//
//                        Map<String,Object> paramMap = new HashMap<>();
//
//                        for (String cell : param.split(",")) {
//                            String[] arr = cell.split(":");
//
//                            String key = arr[0];
//                            String val =arr.length>1? arr[1]:"";
//                            paramMap.put(key,val);
//
//
//                        }
//
//
//                        avgCommand.setParam(paramMap);
//
//                        avgCommand.execute(avgScenario,avgEngine);
//
//                        if (tag.equals("choose")){
//                            sb = false;
//                        }
////                AvgCommand avgCommand = JSON.parseObject(param, (Type) cls);
//
//
//                    }
//
//                    else {
//                        avgEngine.avgOutputCtrl.show(data);
//                    }
//                }
//
//                if (sb)
//                    break;
//            }
//
//        };
//
//
//        r.run();
//
//
//    }
}
